package com.zp.business.entity.patVisit.bo;

import com.zp.common.core.entity.BaseEntity;
import com.zp.common.core.validate.AddGroup;
import com.zp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

/**
 * 患者住院信息业务对象
 *
 * @author zhang peng
 * @ date 2024-06-24
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class PatVisitBo extends BaseEntity {

    /**
     * 主键
     */
    @NotBlank(message = "主键不能为空", groups = {EditGroup.class})
    private String visitId;

    /**
     * 病人ID
     */
    @NotBlank(message = "病人ID不能为空", groups = {AddGroup.class, EditGroup.class})
    private String patientId;

    /**
     * 门诊ID
     */
    @NotBlank(message = "门诊ID不能为空", groups = {AddGroup.class, EditGroup.class})
    private String clinicId;

    /**
     * 住院号
     */
    private String hospitalNo;

    /**
     * 住院次数
     */
    private Integer hospitalizationNumber;

    /**
     * 发病时间
     */
    private Date situationTime;

    /**
     * 病情状态
     */
    private String situationType;

    /**
     * 入院情况
     */
    private String hospitalSituation;

    /**
     * 隔离情况
     */
    private String quarantine;

    /**
     * 入院诊断
     */
    private String diagnosis;

    /**
     * 入院诊断编码
     */
    private String diagnosisCode;

    /**
     * 入院科室
     */
    private String deptAdmissionTo;

    /**
     * 入院病区
     */
    private String wardAdmissionTo;

    /**
     * 入院日期及时间
     */
    @NotNull(message = "入院日期及时间不能为空", groups = {AddGroup.class, EditGroup.class})
    private Date admissionTime;

    /**
     * 入院途径
     */
    private String channel;

    /**
     * 入院来源
     */
    private String source;

    /**
     * 确诊医生
     */
    private String confirmDoctor;

    /**
     * 出院病区
     */
    private String wardDischargeTo;

    /**
     * 出院科室
     */
    private String deptDischargeTo;

    /**
     * 出院时间
     */
    private Date dischargeTime;

    /**
     * 在院出院状态Y在院、N出院
     */
    private String inFlag;

    /**
     * 在科标识Y在科室、N不在科室
     */
    private String deptFlag;

    /**
     * 在病区标识Y在病区、N不在病区
     */
    private String wardFlag;

    /**
     * 所在科室
     */
    private String deptStayed;

    /**
     * 所在病区
     */
    private String wardCode;

    /**
     * 首次入科时间
     */
    private Date firstEnterDeptTime;

    /**
     * 入科日期及时间
     */
    private Date enterDeptTime;

    /**
     * 首次入病区时间
     */
    private Date firstEnterWardTime;

    /**
     * 入病区日期及时间
     */
    private Date enterWardTime;

    /**
     * 质控护士
     */
    private String qualityNurse;

    /**
     * 责任护士
     */
    private String dutyNurse;

    /**
     * 管床医师
     */
    private String doctorInCharge;

    /**
     * 上级医生
     */
    private String upperDoctor;

    /**
     * 主任医生
     */
    private String directorDoctor;

    /**
     * 护理等级
     */
    private String nursingClass;

    /**
     * 首次入床房间号
     */
    private String firstRoomNo;

    /**
     * 首次床号
     */
    private Integer firstBedNo;

    /**
     * 首次床标号
     */
    private String firstBedLabel;

    /**
     * 患者当前房间号
     */
    private String roomNo;

    /**
     * 患者当前床标号
     */
    private String bedLabel;

    /**
     * 床号
     */
    private String bedNo;

    /**
     * 预交金余额
     */
    private BigDecimal prepayments;

    /**
     * 预交金限额
     */
    private BigDecimal paymentInAdvance;

    /**
     * 余欠款  余欠款等于预交款减去自费金额
     */
    private BigDecimal paymentLast;

    /**
     * 总费用
     */
    private BigDecimal totalCosts;

    /**
     * 实际应付费用
     */
    private BigDecimal totalCharges;

    /**
     * 出院方式
     */
    private String settledType;

    /**
     * 出院结算标记
     */
    private String settledIndicator;

    /**
     * 中途结算日期
     */
    private Date halfwayDate;

    /**
     * 机构ID
     */
    private String orgId;


    /**
     * 备注
     */
    private String remarks;

    /**
     * 是否新生儿一块出院，Y：是 N：否
     */
    private String leaveWithoutNewborn;

    /**
     * 是否新生儿一起结算，Y：是 N：否
     */
    private String isNewBornOutpHos;

    /**
     * 转科科别
     */
    private String chanceDept;

    /**
     * 质控时间
     */
    private Date qualityTime;

    /**
     * 病案质量
     */
    private String medicalQuality;

    /**
     * 离院方式
     */
    private String liveHosType;

    /**
     * 质控医师
     */
    private String qualityDoctor;

    /**
     * 最后一次划价时间
     */
    private Date lastAcctTime;

    /**
     * 结算标识
     */
    private String feesNo;

    private String name;

}
